package day18_Reflection.demo05_Function;

import java.lang.reflect.Method;

/*
Method类中用与调用成员方法的方法
Object invoke(Object obj,Object...args):调用obj对象的成员方法参数为args,返回值为Object
注意:通过反射私有化成员方法不能直接调用需要通过setAccessible方法
 */
public class Test01 {
    public static void main(String[] args) throws Exception{
        Class<User> userClass = User.class;//创建类
        User user = userClass.newInstance();//类的对象
        //有参方法的调用
        Method show1 = userClass.getMethod("show");
        Object invoke1 = show1.invoke(user);
        System.out.println(invoke1);
        Method show = userClass.getDeclaredMethod("show", int.class, int.class);
        Object invoke = show.invoke(user, 20,30);
        System.out.println(invoke);
        //无参方法的调用
        Method test = userClass.getDeclaredMethod("test", int.class);
        test.setAccessible(true);//通过反射私有化成员方法不能直接调用需要通过setAccessible方法
        Object invoke2 = test.invoke(user, 10);
        System.out.println(invoke2);
        Method re = userClass.getDeclaredMethod("re");
        re.setAccessible(true);//通过反射私有化成员方法不能直接调用需要通过setAccessible方法
        Object invoke3 = re.invoke(user);
        System.out.println(invoke3);
    }
}
